/*
** Copyright (C) 2010 Calin Radoni
**
** This file is part of CHScanner.
**
** CHScanner is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** CHScanner is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with CHScanner. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "PacketBuilder.h"

/*
	Docs from "Detection of Promiscuous Nodes Using ARP Packets" by securityfriday.com
*/

enum PromiscPacketType
{
	__pptBcast47 = 0,
	__pptBcast16 = 1,
	__pptBcast8  = 2,
	__pptGroup   = 3,
	__pptMcast0  = 4,
	__pptMcast1  = 5
};

class PacketBuilderPromisc : public PacketBuilder
{
protected:
	bool BuildPacketPromiscBcast47(BYTE srcMacIn[6], BYTE srcIpIn[4], BYTE dstIpIn[4]);

	bool BuildPacketPromiscBcast16(BYTE srcMacIn[6], BYTE srcIpIn[4], BYTE dstIpIn[4]);

	bool BuildPacketPromiscBcast8(BYTE srcMacIn[6],  BYTE srcIpIn[4], BYTE dstIpIn[4]);

	bool BuildPacketPromiscGroup(BYTE srcMacIn[6],   BYTE srcIpIn[4], BYTE dstIpIn[4]);

	bool BuildPacketPromiscMcast0(BYTE srcMacIn[6],  BYTE srcIpIn[4], BYTE dstIpIn[4]);

	bool BuildPacketPromiscMcast1(BYTE srcMacIn[6],  BYTE srcIpIn[4], BYTE dstIpIn[4]);

public:
	PacketBuilderPromisc(void);
	~PacketBuilderPromisc(void);

	bool BuildPacketPromisc(PromiscPacketType, BYTE srcMacIn[6],  BYTE srcIpIn[4], BYTE dstIpIn[4]);
};
